/**
 * 接口：
 *    作用：将一些类型做自定义，方便复用
 *    关键字： interface
 *    语法：
 *      interface XXX {
 *
 *      }
 *      XXX - 接口名，一般建议使用大写 I 开头
 */

// 1. 描述对象
interface IPerson {
  name: string;
  age: number;
}

// 2. 描述函数
interface ICallback {
  (a: string, b: number): number;
}

function find(cb: ICallback) {
  cb("10", 10);
}

type Callback = (a: string, b: number) => number;

const fn: Callback = () => {
  return 10;
};

const fn1: ICallback = () => {
  return 10;
};

// 3. 同名 interface 会合并
interface IAni {
  name: string;
  age: number;
}

interface IAni {
  color: string;
}

const p1: IAni = {
  name: "111",
  age: 10,
  color: "red",
};

// 4. 交叉，继承

interface Dongwu {
  name: string;
  age: number;
}

interface Dog {
  wang: string;
}

interface Cat extends Dongwu, Dog {
  color: string;
}

const p2: Cat = {};

export {};
